﻿using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Box.Entities;
namespace Box.Repository
{
    public class ProductoRepository : MasterRepository, IProductoRepository
    {
        public List<Producto> GetAllFromProducto()
        {
            var query = from c in Context.Productos
                        .Include("TipoProducto")
                        select c;
            return query.ToList();
        }

        public List<Producto> GetFromProductoByCriterio(string criterio)
        {
            var query = from c in Context.Productos
                        .Include("TipoProducto")
                        select c;
            if (criterio != null && criterio != string.Empty)
            {
                query = from c in query
                        where c.NombreProducto.ToUpper().Contains(criterio.ToUpper()) ||
                              c.DescripcionProducto.ToUpper().Contains(criterio.ToUpper())||
                              c.TipoProducto.DescripcionProducto.ToUpper().Contains(criterio.ToUpper())
                        select c;
            }
            return query.ToList();
        }

        public Producto GetFromProductoById(int id)
        {
            var query = from p in Context.Productos
                select p;
            if (id!=null)
            {
                query = from p in query
                    where p.Id.Equals(id)
                    select p;
            }
            return query.SingleOrDefault();
        }

        public void AddProducto(Producto Producto)
        {
            Context.Productos.Add(Producto);
            Context.SaveChanges();
        }

        public void UpdateProducto(Producto Producto)
        {
            Context.Entry(Producto).State = EntityState.Modified;
            Context.SaveChanges();
        }

        public void RemoveProducto(int id)
        {
            var existe = Context.Productos.Find(id);
            if (existe != null)
            {
                Context.Productos.Remove(existe);
                Context.SaveChanges();
            }
        }

        public bool ExisteProducto(int id)
        {
            var query = Context.Productos.Where(p => p.Id.Equals(id));

            return query.Any();
        }
    }
}
